package Ep02_LinkedList._0024;

import Ep02_LinkedList.ListNode;

/**
 * @author Jimmy Zhan WORKSTATION
 * @date 2023/3/8 17:20
 * 说明： 力扣 0024两两交换链表元素
 * 虚拟头结点+双指针
 *     虚拟头结点：把每种情况都通用，因此pre指针要从dummyHead开始，pre指针更新时更新到需要交换位置的第一个节点的前驱结点即可
 *     双指针：pre、cur、temp用于断点
 */

public class Mine {
    public ListNode swapPairs(ListNode head){
        if (head == null){
            return null;
        }
        if (head.next == null){
            return head;
        }
        ListNode dummyHead = new ListNode(-1);
        dummyHead.next = head;

        ListNode pre = dummyHead;
        ListNode cur = head;

        // 注意跳出条件  ---->  想不明白就画图
        while(cur!=null && cur.next!=null){
            pre.next = cur.next;
            cur.next = cur.next.next;
            pre.next.next = cur;
            pre = cur;
            cur = cur.next;
        }
        return dummyHead.next;
    }
}
